from datetime import datetime
from sqlalchemy import Column, Integer, String, DateTime, Boolean, Text, BigInteger, DECIMAL, Index
# 创建模型基类
from exts import db
from Common import Common

Base = db.Model


class MonitoringTask(Base):
    """监控任务类"""
    __tablename__ = 'monitoring_task'
    id = Column(Integer, primary_key=True)
    task_name = Column(String(length=255))  # 任务名称
    task_type = Column(String(length=255))  # 任务类型，如热门话题监控或指定视频监控
    topic = Column(String(length=255))  # 监控的话题，仅当任务类型为热门话题监控时使用
    start_time = Column(DateTime, default=datetime.now)  # 任务建立时间
    end_time = Column(DateTime)  # 任务结束时间
    is_active = Column(Boolean, default=True)  # 是否处于监控状态
    monitored_videos = Column(String(length=255))  # 任务与监控视频的一对多关系,存储视频bv号列表


class MonitoredVideoHistory(Base):
    """监控视频任务的历史数据"""
    __tablename__ = 'monitored_video_history'
    id = Column(Integer, primary_key=True)
    bvid = Column(String(length=255), index=True)  # 视频bv号
    aid = Column(String(length=255))  # 视频av号
    video_name = Column(Text(collation='utf8mb4_bin'))  # 视频标题
    tid = Column(Integer)  # 视频类别id
    tname = Column(String(length=255))  # 视频类别
    last_comment_time = Column(DateTime)  # 最近评论时间
    comment_count = Column(Integer, default=0)  # 评论数量
    violence_count = Column(Integer, default=0)  # 涉及网络暴力的评论数
    sarcasm_count = Column(Integer, default=0)  # 涉及阴阳怪气的评论数
    did_violence_count = Column(Integer, default=0)  # 综合确认是网络暴力的评论数
    alert_standard = Column(Integer, default=0)  # 视频报警的策略，0网络暴力，1阴阳怪气，2综合
    alert_rate = Column(DECIMAL(5, 4), default=0.2)  # 高于多少则报警
    pubdate = Column(DateTime)  # 视频发布时间
    views = Column(Integer)  # 视频浏览量
    danmaku = Column(Integer)  # 弹幕条数
    favorite = Column(Integer)  # 收藏数量
    coin = Column(Integer)  # 投币数
    share = Column(Integer)  # 分享数
    like = Column(Integer)  # 点赞数
    dislike = Column(Integer)  # 点踩数量
    duration = Column(Integer)  # 视频时长
    record_time = Column(DateTime)  # 记录数据时间


class MonitoredVideo(Base):
    """监控视频任务"""
    __tablename__ = 'monitored_video'
    id = Column(Integer, primary_key=True)
    bvid = Column(String(length=255), index=True, unique=True)  # 视频bv号
    aid = Column(String(length=255))  # 视频av号
    video_name = Column(Text(collation='utf8mb4_bin'))  # 视频标题
    tid = Column(Integer)  # 视频类别id
    tname = Column(String(length=255))  # 视频类别
    last_comment_time = Column(DateTime)  # 最近评论时间
    comment_count = Column(Integer, default=0)  # 评论数量
    violence_count = Column(Integer, default=0)  # 涉及网络暴力的评论数
    sarcasm_count = Column(Integer, default=0)  # 涉及阴阳怪气的评论数
    did_violence_count = Column(Integer, default=0)  # 综合确认是网络暴力的评论数
    alert_standard = Column(Integer, default=0)  # 视频报警的标准，0网络暴力，1阴阳怪气，2综合
    alert_rate = Column(DECIMAL(5, 4), default=0.1718)  # 高于多少则报警
    pubdate = Column(DateTime)  # 视频发布时间
    views = Column(Integer)  # 视频浏览量
    danmaku = Column(Integer)  # 弹幕条数
    favorite = Column(Integer)  # 收藏数量
    coin = Column(Integer)  # 投币数
    share = Column(Integer)  # 分享数
    like = Column(Integer)  # 点赞数
    dislike = Column(Integer)  # 点踩数量
    duration = Column(Integer)  # 视频时长
    now_time = Column(DateTime)  # 当前条数据记录的时间
    is_banned = Column(Boolean, default=False)  # 是否封禁视频


class Comment(Base):
    """评论类"""
    __tablename__ = 'comment'
    id = Column(Integer, primary_key=True)
    bvid = Column(String(length=255), index=True)  # 评论所属视频bvid
    rpid = Column(BigInteger)  # 评论的rpid，唯一标识
    oid = Column(Integer)  # 评论区id （也是视频的avid）
    type = Column(Integer)  # 评论区类型代码
    content = Column(Text(collation='utf8mb4_bin'))  # 评论内容(存储表情)
    account_id = Column(String(length=255))  # 评论者的id
    account_name = Column(String(length=255))  # 评论者的名称
    account_sex = Column(String(length=255))  # 评论者性别
    account_level = Column(Integer)  # 评论者等级
    publish_time = Column(DateTime)  # 评论发布日期
    is_violence = Column(Boolean, default=False)  # 是否涉及网络暴力
    is_sarcasm = Column(Boolean, default=False)  # 是否阴阳怪气
    is_judge = Column(Boolean, default=False)  # 是否判断过了
    is_did_violence = Column(Integer, default=0)  # 综合确认是网络暴力
    is_banned = Column(Boolean, default=False)  # 是否封禁


class VideoZone(Base):
    """视频zone类"""
    __tablename__ = 'video_zone'
    id = Column(Integer, primary_key=True)
    tid = Column(Integer)  # 视频类别id
    tname = Column(String(length=255))  # 视频类别
    average_violence_rate = Column(DECIMAL(5, 4), default=0)  # 类别平均的暴力占比
    average_sarcasm_rate = Column(DECIMAL(5, 4), default=0)  # 类别平均的嘲讽占比
    average_did_violence_rate = Column(DECIMAL(5, 4), default=0)  # 类别平均的综合暴力占比
    t_count = Column(Integer, default=Common.ZONE_INITIAL_VALUE)  # 类别目前视频量
    t_should_count = Column(Integer, default=Common.ZONE_INITIAL_VALUE)  # 类别预计视频量


class VideoZoneHistory(Base):
    """视频zone类"""
    __tablename__ = 'video_zone_history'
    id = Column(Integer, primary_key=True)
    tid = Column(Integer)  # 视频类别id
    tname = Column(String(length=255))  # 视频类别
    average_violence_rate = Column(DECIMAL(5, 4), default=0)  # 类别平均的暴力占比
    average_sarcasm_rate = Column(DECIMAL(5, 4), default=0)  # 类别平均的嘲讽占比
    average_did_violence_rate = Column(DECIMAL(5, 4), default=0)  # 类别平均的综合暴力占比
    t_count = Column(Integer, default=Common.ZONE_INITIAL_VALUE)  # 类别目前视频量
    t_should_count = Column(Integer, default=Common.ZONE_INITIAL_VALUE)  # 类别预计视频量
    record_time = Column(DateTime)  # 记录时间


class Alert(Base):
    """警报类"""
    __tablename__ = 'alert'
    id = Column(Integer, primary_key=True)
    alert_time = Column(DateTime)
    video_bvid = Column(String(length=255))
    alert_by = Column(Integer)
    task_id = Column(Integer)
    is_active = Column(Boolean, default=False)


class ReportedAccount(Base):
    """被举报的账号"""
    __tablename__ = 'reported_account'
    id = Column(Integer, primary_key=True)
    bvid = Column(String(length=255), index=True, unique=True)  # 视频bv号
    rpid = Column(BigInteger)  # 评论的rpid，唯一标识
    comment_content = Column(Text(collation='utf8mb4_bin'))  # 评论内容(存储表情)
    account_id = Column(String(length=255))  # 评论者的id
    account_name = Column(String(length=255))  # 评论者的名称
    account_sex = Column(String(length=255))  # 评论者性别
    account_level = Column(Integer)  # 评论者等级
    comment_publish_time = Column(DateTime)  # 评论发布日期
    is_violence = Column(Boolean, default=False)  # 是否涉及网络暴力
    is_sarcasm = Column(Boolean, default=False)  # 是否阴阳怪气
    is_did_violence = Column(Integer, default=0)  # 综合确认是网络暴力
    banned_time = Column(DateTime)  # 记录时间
